package com.zmn.oms.business.interfaces.work;

import com.zmn.oms.common.dto.OmsBaseOperator;
import com.zmn.oms.model.bo.work.OrderWorkPositionBO;
import com.zmn.oms.model.dto.work.position.OrderWorkPositionManualSyncDIO;
import com.zmn.oms.model.entity.work.OrderWork;
import com.zmn.oms.model.entity.work.OrderWorkPosition;
import com.zmn.oms.model.vo.work.OrderWorkPositionVO;

/**
 * @author sunlife
 * @date:2020/8/17 5:03 下午
 * description:
 */
public interface OrderWorkPositionBService {


    /**
     * 查询位置信息
     * @param positionId
     * @return
     */
    OrderWorkPositionVO getById(Long positionId);

    /**
     * 维护位置信息
     * @param bo
     * @return
     */
    int updateById(OrderWorkPositionBO bo);

    /**
     * 同步位置信息
     * @param dbOrderWork
     * @param omsBaseOperator
     * @param logType
     */
    void syncOrderPosition(OrderWork dbOrderWork, OmsBaseOperator omsBaseOperator, int logType);

    /**
     * 计算当前位置与用户位置距离
     * @param workId
     * @param longitude
     * @param latitude
     */
    Integer customerCalcDistance(Long workId, Long visitUserId, Double longitude, Double latitude);

    /**
     * 计算当前位置与用户位置距离
     * 用户家的位置：取上门扫码时的位置/上传形象照的位置/用户下单的地址 距离最小的
     * @param workId
     * @param visitUserId
     * @param longitude
     * @param latitude
     * @return
     */
    Integer customerMinPayDistance(Long workId, Long visitUserId, Double longitude, Double latitude);


    /**
     * 计算当前位置与用户位置距离
     * 用户家的位置：取上门扫码时的位置/上传形象照的位置/用户下单的地址 距离最小的
     * @param workId
     * @param visitUserId
     * @param longitude
     * @param latitude
     * @param orderWorkPosition
     * @return
     */
    Integer customerMinPayDistance(Long workId, Long visitUserId, Double longitude, Double latitude, OrderWorkPosition orderWorkPosition);

    /**
     * 手动同步订单位置信息
     * @param orderWork
     * @param dio
     */
    void manualSyncMasterPayLocation(OrderWork orderWork, OrderWorkPositionManualSyncDIO dio);

    /**
     * 手动同步订单位置信息和距离
     *
     * @param orderWork
     * @param dio
     */
    void manualSyncOrderPayPosition(OrderWork orderWork, OrderWorkPositionManualSyncDIO dio);
}
